home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / msn / p10 / MSNP10Notification.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  10KB  |  286 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import logging
  5. from uuid import UUID
  6. from util import callsback, get
  7. import msn
  8. from msn import Message
  9. from msn.p9 import Notification as Super
  10. log = logging.getLogger('msn.p10.ns')
  11. defcb = dict(trid = True, callback = sentinel)
  12.  
  13. class GroupId(UUID):
  14.     
  15.     def __init__(self, id, *a, **k):
  16.         if isinstance(id, UUID):
  17.             id = str(id)
  18.         
  19.         
  20.         try:
  21.             UUID.__init__(self, id, *a, **k)
  22.         except Exception:
  23.             e = None
  24.             print 'error initializing contact id: ', a, k
  25.             raise e
  26.  
  27.  
  28.     
  29.     def __repr__(self):
  30.         return '<GroupId: %s>' % UUID.__repr__(self)
  31.  
  32.     
  33.     def __eq__(self, other):
  34.         return str(other) == str(self)
  35.  
  36.     
  37.     def __hash__(self):
  38.         return hash(str(self))
  39.  
  40.  
  41.  
  42. class ContactId(UUID):
  43.     
  44.     def __init__(self, *a, **k):
  45.         
  46.         try:
  47.             UUID.__init__(self, *a, **k)
  48.         except Exception:
  49.             e = None
  50.             print 'error initializing contact id: ', a, k
  51.             raise e
  52.  
  53.  
  54.     
  55.     def __repr__(self):
  56.         return '<ContactId: %s>' % UUID.__repr__(self)
  57.  
  58.     
  59.     def __eq__(self, other):
  60.         return str(other) == str(self)
  61.  
  62.  
  63.  
  64. class MSNP10Notification(Super):
  65.     cid_class = ContactId
  66.     events = Super.events | set(('contact_id_recv',))
  67.     versions = [
  68.         'MSNP10']
  69.     
  70.     def _set_display_name(self, new_alias, callback):
  71.         bytes = new_alias.encode('utf-8')
  72.         bytes = msn.util.url_encode(bytes)
  73.         self.send_prp('MFN', bytes, callback)
  74.  
  75.     
  76.     def _set_remote_alias(self, buddy, new_alias, callback):
  77.         self.send_sbp(contact.guid, 'MFN', msn.util.url_encode(new_alias.encode('utf-8')), callback)
  78.  
  79.     
  80.     def recv_syn(self, msg):
  81.         (__, __, num_buddies, num_groups) = msg.args
  82.         self.event('contact_list_details', int(num_buddies), int(num_groups))
  83.  
  84.     
  85.     def recv_lsg(self, msg):
  86.         log.debug('got lsg: %r', msg)
  87.         
  88.         try:
  89.             (name, group_id) = msg.args[:2]
  90.         except ValueError:
  91.             e = None
  92.             if msg.args:
  93.                 
  94.                 try:
  95.                     group_id = GroupId(msg.args[0])
  96.                 except Exception:
  97.                     e2 = None
  98.                     name = msg.args[0]
  99.                     import uuid as uuid
  100.                     group_id = str(uuid.uuid4())
  101.  
  102.                 name = ''
  103.             else:
  104.                 return None
  105.         except:
  106.             msg.args
  107.  
  108.         self.event('group_receive', msn.util.url_decode(name).decode('utf-8'), GroupId(group_id))
  109.  
  110.     
  111.     def recv_lst(self, msg):
  112.         args = list(msg.args)
  113.         
  114.         try:
  115.             list_flags = int(args[-1])
  116.             groups = []
  117.             args.pop()
  118.         except ValueError:
  119.             groups = map(GroupId, args[-1].split(','))
  120.             list_flags = int(args[-2])
  121.             args.pop()
  122.             args.pop()
  123.  
  124.         split_args = []
  125.         for arg in args:
  126.             split = arg.split('=', 1)
  127.             if len(split) != 2:
  128.                 split_args[-1][-1] += ' ' + split[0]
  129.                 continue
  130.             split_args.append(split)
  131.         
  132.         
  133.         try:
  134.             info = dict(split_args)
  135.         except ValueError:
  136.             log.error('This data is so screwed up, maybe you can do something with it: %r', msg)
  137.             return None
  138.  
  139.         (name, nick, guid) = (lambda .0: for k in .0:
  140. info.get(k, ''))('NFC')
  141.         nick = msn.util.url_decode(nick).decode('utf-8')
  142.         self._last_bname = name
  143.         self.event('recv_contact', name, list_flags, groups)
  144.         self.event('contact_alias', name, nick)
  145.         if guid:
  146.             self.event('contact_id_recv', name, ContactId(guid))
  147.         
  148.  
  149.     
  150.     def recv_adc(self, msg):
  151.         l_id = msg.args[0]
  152.         info = list(msg.args[1:])
  153.         if l_id == 'FL':
  154.             if '=' not in info[-1]:
  155.                 g_id = GroupId(info.pop())
  156.             else:
  157.                 g_id = None
  158.         else:
  159.             g_id = None
  160.         
  161.         has_equals = lambda i: '=' in i
  162.         d = (dict,)((lambda .0: for arg in .0:
  163. if has_equals(arg):
  164. arg.split('=', 1)continue)(info))
  165.         (name, nick, guid) = (lambda .0: for k in .0:
  166. d.get(k, ''))(list('NFC'))
  167.         nick = msn.util.url_decode(nick).decode('utf-8')
  168.         list_flags = dict(FL = 1, AL = 2, BL = 4, RL = 8, PL = 16)[l_id]
  169.         if guid:
  170.             guid = ContactId(guid)
  171.             id = guid
  172.         else:
  173.             id = name
  174.         self.event('on_contact_add', name, id, list_flags, [
  175.             g_id])
  176.         if name and guid:
  177.             self.event('contact_id_recv', name, guid)
  178.         
  179.         if name:
  180.             self.event('contact_alias', name, nick)
  181.         
  182.  
  183.     
  184.     def recv_rem(self, msg):
  185.         l_id = msg.args[0]
  186.         
  187.         try:
  188.             c_id = ContactId(msg.args[1])
  189.         except ValueError:
  190.             c_id = msg.args[1]
  191.  
  192.         g_id = get(msg.args, 2, None)
  193.         if g_id is not None:
  194.             g_id = GroupId(g_id)
  195.         
  196.         self.event('contact_remove', c_id, l_id, g_id)
  197.  
  198.     
  199.     def recv_adg(self, msg):
  200.         log.debug('got adg')
  201.         (name, g_id) = msg.args
  202.         name = msn.util.url_decode(name).decode('utf-8')
  203.         g_id = GroupId(g_id)
  204.         self.event('group_add', name, g_id)
  205.  
  206.     
  207.     def _remove_group(self, groupid, callback = None):
  208.         self.send_rmg(groupid, callback = callback)
  209.  
  210.     
  211.     def recv_rmg(self, msg):
  212.         log.debug('got rmg')
  213.         (g_id,) = msg.args
  214.         g_id = GroupId(g_id)
  215.         self.event('group_remove', g_id)
  216.  
  217.     
  218.     def recv_reg(self, msg):
  219.         log.debug('got reg')
  220.         (g_id, name) = msg.args
  221.         g_id = GroupId(g_id)
  222.         name = msn.util.url_decode(name).decode('utf-8')
  223.         self.event('group_rename', g_id, name)
  224.  
  225.     
  226.     def recv_rea(self, msg):
  227.         raise msn.WrongVersionException
  228.  
  229.     
  230.     def recv_add(self, msg):
  231.         raise msn.WrongVersionException
  232.  
  233.     
  234.     def send_syn(self):
  235.         log.debug('sending syn')
  236.         self.socket.send(Message('SYN', '0', '0'), **defcb)
  237.  
  238.     
  239.     def send_adc(self, l_id, bname, bid, g_id = '', callback = None):
  240.         bname = getattr(bname, 'name', bname)
  241.         binfo = 'N=%s' % bname
  242.         if l_id == 'FL':
  243.             binfo += ' F=%s' % bname
  244.         
  245.         if g_id and bid:
  246.             binfo = 'C=%s' % bid
  247.         
  248.         if not g_id:
  249.             pass
  250.         self.socket.send(Message('ADC', l_id, binfo, ''), trid = True, callback = callback)
  251.  
  252.     send_adc = callsback(send_adc)
  253.     send_add = send_adc
  254.     
  255.     def send_rem(self, l_id, bname, bid, g_id = '', callback = None):
  256.         if l_id == 'FL':
  257.             id = bid
  258.         else:
  259.             id = bname
  260.         if g_id is None:
  261.             g_id = ''
  262.         
  263.         if not id or g_id:
  264.             log.info('Didnt get an id or gid. returning from send_rem. traceback to follow...')
  265.             import traceback as traceback
  266.             traceback.print_stack()
  267.             callback.success()
  268.             return None
  269.         
  270.         self.socket.send(Message('REM', l_id, id, g_id), trid = True, callback = callback)
  271.  
  272.     send_rem = callsback(send_rem)
  273.     
  274.     def send_prp(self, prp_type, new_val, callback):
  275.         self.socket.send(Message('PRP', prp_type, new_val), trid = True, callback = callback)
  276.  
  277.     
  278.     def send_sbp(self, b_guid, prp_type, new_val, callback):
  279.         self.socket.send(Message('SBP', b_guid, prp_type, new_val), trid = True, callback = callback)
  280.  
  281.     
  282.     def send_rea(self, *args, **kwargs):
  283.         raise msn.WrongVersionException
  284.  
  285.  
  286.